package com.demo.java.OD351_400.OD386;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【掌握单词个数，万能字符单词拼写(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146241039
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取单词数量
        int n = scanner.nextInt();
        String[] words = new String[n];
        for (int i = 0; i < n; i++) {
            words[i] = scanner.next();  // 读取每个单词
        }
        String chars = scanner.next();  // 读取字符集

        int ret = 0;  // 记录能够拼写出来的单词数量
        Map<Character, Integer> charCount = new HashMap<>();

        // 统计chars中每个字符的出现次数
        for (char c : chars.toCharArray()) {
            charCount.put(c, charCount.getOrDefault(c, 0) + 1);
        }

        // 遍历每个单词
        for (String word : words) {
            Map<Character, Integer> wordCount = new HashMap<>();
            // 统计当前单词中每个字符的出现次数
            for (char c : word.toCharArray()) {
                wordCount.put(c, wordCount.getOrDefault(c, 0) + 1);
            }

            int diff = 0;  // 记录当前单词需要多少额外的字符
            // 遍历当前单词的每个字符，计算需要的字符数量
            for (char c : wordCount.keySet()) {
                diff += Math.max(wordCount.get(c) - charCount.getOrDefault(c, 0), 0);
            }

            // 如果diff小于或等于chars中"?"的数量，则表示该单词可以拼写
            if (diff <= charCount.getOrDefault('?', 0)) {
                ret++;  // 增加可拼写单词的数量
            }
        }

        // 输出能够拼写的单词数量
        System.out.println(ret);
    }
}